{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multi-step forecasting: recursive approach\n",
    "\n",
    "[Feature Engineering for Time Series Forecasting](https://www.trainindata.com/p/feature-engineering-for-forecasting)\n",
    "\n",
    "In the previous notebooks, we predicted the hourly pollutant concentration for the next 24 hours utilizing a direct approach.\n",
    "\n",
    "Here, we will carry out multi-step forecasting using a recursive approach.\n",
    "\n",
    "## Data\n",
    "\n",
    "We will work with the Air Quality Dataset from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Air+Quality).\n",
    "\n",
    "For instructions on how to download, prepare, and store the dataset, refer to notebook number 3, in the folder \"01-Datasets\" from this repo."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "from feature_engine.creation import CyclicalFeatures\n",
    "from feature_engine.datetime import DatetimeFeatures\n",
    "from feature_engine.imputation import DropMissingData\n",
    "from feature_engine.selection import DropFeatures\n",
    "from feature_engine.timeseries.forecasting import (\n",
    "    LagFeatures,\n",
    "    WindowFeatures,\n",
    ")\n",
    "\n",
    "from sklearn.linear_model import Lasso\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.multioutput import MultiOutputRegressor\n",
    "from sklearn.pipeline import Pipeline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Same function we saw in section 2.\n",
    "\n",
    "def load_data():\n",
    "\n",
    "    # Data lives here.\n",
    "    filename = \"../datasets/AirQualityUCI_ready.csv\"\n",
    "\n",
    "    # Load data: only the time variable and CO.\n",
    "    data = pd.read_csv(\n",
    "        filename,\n",
    "        usecols=[\"Date_Time\", \"CO_sensor\", \"RH\"],\n",
    "        parse_dates=[\"Date_Time\"],\n",
    "        index_col=[\"Date_Time\"],\n",
    "    )\n",
    "\n",
    "    # Sanity: sort index.\n",
    "    data.sort_index(inplace=True)\n",
    "\n",
    "    # Reduce data span.\n",
    "    data = data[\"2004-04-01\":\"2005-04-30\"]\n",
    "\n",
    "    # Remove outliers\n",
    "    data = data.loc[(data[\"CO_sensor\"] > 0)]\n",
    "    \n",
    "    ######## NEW #########\n",
    "    # Add missing timestamps (easier for the demo)\n",
    "    data = data.asfreq(\"1H\")\n",
    "\n",
    "    # Fill in missing data.\n",
    "    data = data.fillna(method=\"ffill\")\n",
    "    ######################\n",
    "    \n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2004-04-04 00:00:00</th>\n",
       "      <td>1224.0</td>\n",
       "      <td>56.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 01:00:00</th>\n",
       "      <td>1215.0</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 02:00:00</th>\n",
       "      <td>1115.0</td>\n",
       "      <td>62.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 03:00:00</th>\n",
       "      <td>1124.0</td>\n",
       "      <td>65.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 04:00:00</th>\n",
       "      <td>1028.0</td>\n",
       "      <td>65.3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     CO_sensor    RH\n",
       "Date_Time                           \n",
       "2004-04-04 00:00:00     1224.0  56.5\n",
       "2004-04-04 01:00:00     1215.0  59.2\n",
       "2004-04-04 02:00:00     1115.0  62.4\n",
       "2004-04-04 03:00:00     1124.0  65.0\n",
       "2004-04-04 04:00:00     1028.0  65.3"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load data.\n",
    "\n",
    "data = load_data()\n",
    "\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Feature engineering steps\n",
    "\n",
    "The same pipeline from the previous notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Datetime features\n",
    "dtf = DatetimeFeatures(\n",
    "    # the datetime variable\n",
    "    variables=\"index\",\n",
    "    \n",
    "    # the features we want to create\n",
    "    features_to_extract=[\n",
    "        \"month\",\n",
    "        \"week\",\n",
    "        \"day_of_week\",\n",
    "        \"day_of_month\",\n",
    "        \"hour\",\n",
    "        \"weekend\",\n",
    "    ],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Lag features.\n",
    "\n",
    "lagf = LagFeatures(\n",
    "    variables=[\"CO_sensor\"],  # the input variables\n",
    "    freq=[\"1H\", \"24H\"],  # move 1 hr and 24 hrs forward\n",
    "    missing_values=\"ignore\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Window features\n",
    "\n",
    "winf = WindowFeatures(\n",
    "    variables=[\"CO_sensor\"],  # the input variables\n",
    "    window=\"3H\",  # average of 3 previous hours\n",
    "    freq=\"1H\",  # move 1 hr forward\n",
    "    missing_values=\"ignore\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Periodic features\n",
    "\n",
    "cyclicf = CyclicalFeatures(\n",
    "    # The features we want to transform.\n",
    "    variables=[\"month\", \"hour\"],\n",
    "    # Whether to drop the original features.\n",
    "    drop_original=False,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Drop missing data\n",
    "imputer = DropMissingData()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Drop original time series\n",
    "\n",
    "drop_ts = DropFeatures(features_to_drop=[\"CO_sensor\", \"RH\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Feature engineering pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "pipe = Pipeline(\n",
    "    [\n",
    "        (\"datetime_features\", dtf),\n",
    "        (\"lagf\", lagf),\n",
    "        (\"winf\", winf),\n",
    "        (\"Periodic\", cyclicf),\n",
    "        (\"dropna\", imputer),\n",
    "        (\"drop_ts\", drop_ts),\n",
    "    ]\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Split data into train and test\n",
    "\n",
    "We will leave the last month of data as hold-out sample to evaluate the performance of the model.\n",
    "\n",
    "Remember that we need data about the pollutant information at least 24 hours before the first forecasting point in the test set to create the input features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Split the data.\n",
    "\n",
    "# input data\n",
    "X_train = data[data.index < \"2005-03-04\"]\n",
    "X_test = data[data.index >= pd.Timestamp(\"2005-03-04\") - pd.offsets.Hour(24)]\n",
    "\n",
    "# target\n",
    "y_train = data[data.index < \"2005-03-04\"][[\"CO_sensor\", \"RH\"]]\n",
    "y_test = data[data.index >= pd.Timestamp(\"2005-03-04\") - pd.offsets.Hour(24)][[\n",
    "    \"CO_sensor\", \"RH\",\n",
    "]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2004-04-04 00:00:00</th>\n",
       "      <td>1224.0</td>\n",
       "      <td>56.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 01:00:00</th>\n",
       "      <td>1215.0</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 02:00:00</th>\n",
       "      <td>1115.0</td>\n",
       "      <td>62.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 03:00:00</th>\n",
       "      <td>1124.0</td>\n",
       "      <td>65.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-04 04:00:00</th>\n",
       "      <td>1028.0</td>\n",
       "      <td>65.3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     CO_sensor    RH\n",
       "Date_Time                           \n",
       "2004-04-04 00:00:00     1224.0  56.5\n",
       "2004-04-04 01:00:00     1215.0  59.2\n",
       "2004-04-04 02:00:00     1115.0  62.4\n",
       "2004-04-04 03:00:00     1124.0  65.0\n",
       "2004-04-04 04:00:00     1028.0  65.3"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train pipeline and model\n",
    "\n",
    "We train the engineering steps and the pipeline utilizing the training set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>week</th>\n",
       "      <th>day_of_week</th>\n",
       "      <th>day_of_month</th>\n",
       "      <th>hour</th>\n",
       "      <th>weekend</th>\n",
       "      <th>CO_sensor_lag_1H</th>\n",
       "      <th>CO_sensor_lag_24H</th>\n",
       "      <th>CO_sensor_window_3H_mean</th>\n",
       "      <th>month_sin</th>\n",
       "      <th>month_cos</th>\n",
       "      <th>hour_sin</th>\n",
       "      <th>hour_cos</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2004-04-05 00:00:00</th>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1188.0</td>\n",
       "      <td>1224.0</td>\n",
       "      <td>1165.666667</td>\n",
       "      <td>0.866025</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-05 01:00:00</th>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1065.0</td>\n",
       "      <td>1215.0</td>\n",
       "      <td>1149.666667</td>\n",
       "      <td>0.866025</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.269797</td>\n",
       "      <td>0.962917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-05 02:00:00</th>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>999.0</td>\n",
       "      <td>1115.0</td>\n",
       "      <td>1084.000000</td>\n",
       "      <td>0.866025</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.519584</td>\n",
       "      <td>0.854419</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-05 03:00:00</th>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>911.0</td>\n",
       "      <td>1124.0</td>\n",
       "      <td>991.666667</td>\n",
       "      <td>0.866025</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.730836</td>\n",
       "      <td>0.682553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-04-05 04:00:00</th>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>873.0</td>\n",
       "      <td>1028.0</td>\n",
       "      <td>927.666667</td>\n",
       "      <td>0.866025</td>\n",
       "      <td>-0.5</td>\n",
       "      <td>0.887885</td>\n",
       "      <td>0.460065</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     month  week  day_of_week  day_of_month  hour  weekend  \\\n",
       "Date_Time                                                                    \n",
       "2004-04-05 00:00:00      4    15            0             5     0        0   \n",
       "2004-04-05 01:00:00      4    15            0             5     1        0   \n",
       "2004-04-05 02:00:00      4    15            0             5     2        0   \n",
       "2004-04-05 03:00:00      4    15            0             5     3        0   \n",
       "2004-04-05 04:00:00      4    15            0             5     4        0   \n",
       "\n",
       "                     CO_sensor_lag_1H  CO_sensor_lag_24H  \\\n",
       "Date_Time                                                  \n",
       "2004-04-05 00:00:00            1188.0             1224.0   \n",
       "2004-04-05 01:00:00            1065.0             1215.0   \n",
       "2004-04-05 02:00:00             999.0             1115.0   \n",
       "2004-04-05 03:00:00             911.0             1124.0   \n",
       "2004-04-05 04:00:00             873.0             1028.0   \n",
       "\n",
       "                     CO_sensor_window_3H_mean  month_sin  month_cos  hour_sin  \\\n",
       "Date_Time                                                                       \n",
       "2004-04-05 00:00:00               1165.666667   0.866025       -0.5  0.000000   \n",
       "2004-04-05 01:00:00               1149.666667   0.866025       -0.5  0.269797   \n",
       "2004-04-05 02:00:00               1084.000000   0.866025       -0.5  0.519584   \n",
       "2004-04-05 03:00:00                991.666667   0.866025       -0.5  0.730836   \n",
       "2004-04-05 04:00:00                927.666667   0.866025       -0.5  0.887885   \n",
       "\n",
       "                     hour_cos  \n",
       "Date_Time                      \n",
       "2004-04-05 00:00:00  1.000000  \n",
       "2004-04-05 01:00:00  0.962917  \n",
       "2004-04-05 02:00:00  0.854419  \n",
       "2004-04-05 03:00:00  0.682553  \n",
       "2004-04-05 04:00:00  0.460065  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Train the pipeline and create features\n",
    "# for the train set:\n",
    "\n",
    "X_train_t = pipe.fit_transform(X_train)\n",
    "\n",
    "# Data with input features.\n",
    "X_train_t.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(8016, 2)\n",
      "(7992, 2)\n"
     ]
    }
   ],
   "source": [
    "# Our transformation pipeline removed observations\n",
    "# with missing data, so we need to remove those\n",
    "# observations from the target variable as well.\n",
    "\n",
    "print(y_train.shape)\n",
    "\n",
    "y_train_t = y_train.loc[X_train_t.index]\n",
    "\n",
    "print(y_train_t.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MultiOutputRegressor(estimator=Lasso(random_state=0))</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MultiOutputRegressor</label><div class=\"sk-toggleable__content\"><pre>MultiOutputRegressor(estimator=Lasso(random_state=0))</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: Lasso</label><div class=\"sk-toggleable__content\"><pre>Lasso(random_state=0)</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">Lasso</label><div class=\"sk-toggleable__content\"><pre>Lasso(random_state=0)</pre></div></div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "MultiOutputRegressor(estimator=Lasso(random_state=0))"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lasso regression\n",
    "\n",
    "# We need a prediction for CO concentration\n",
    "# and a prediction for RH.\n",
    "\n",
    "lasso = MultiOutputRegressor(Lasso(random_state=0))\n",
    "\n",
    "# Train the model\n",
    "\n",
    "lasso.fit(X_train_t, y_train_t)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Forecasting 24 hours forward - step by step\n",
    "\n",
    "First, we will obtain a forecast for the first 24 hours in the test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Timestamp('2005-03-04 00:00:00'), Timestamp('2005-03-04 23:00:00'))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The first hour of forecast.\n",
    "forecast_point = pd.Timestamp(\"2005-03-04\")\n",
    "\n",
    "# The forecasting horizon (24 hs ahead)\n",
    "forecast_end = forecast_point + pd.offsets.Hour(23)\n",
    "\n",
    "forecast_point, forecast_end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2005-03-04 00:00:00', '2005-03-04 01:00:00',\n",
       "               '2005-03-04 02:00:00', '2005-03-04 03:00:00',\n",
       "               '2005-03-04 04:00:00', '2005-03-04 05:00:00',\n",
       "               '2005-03-04 06:00:00', '2005-03-04 07:00:00',\n",
       "               '2005-03-04 08:00:00', '2005-03-04 09:00:00',\n",
       "               '2005-03-04 10:00:00', '2005-03-04 11:00:00',\n",
       "               '2005-03-04 12:00:00', '2005-03-04 13:00:00',\n",
       "               '2005-03-04 14:00:00', '2005-03-04 15:00:00',\n",
       "               '2005-03-04 16:00:00', '2005-03-04 17:00:00',\n",
       "               '2005-03-04 18:00:00', '2005-03-04 19:00:00',\n",
       "               '2005-03-04 20:00:00', '2005-03-04 21:00:00',\n",
       "               '2005-03-04 22:00:00', '2005-03-04 23:00:00'],\n",
       "              dtype='datetime64[ns]', freq='H')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The timestamps at which we want to predict\n",
    "# CO concentration.\n",
    "\n",
    "index = pd.date_range(\n",
    "    start=forecast_point,\n",
    "    end=forecast_end,\n",
    "    freq=\"1H\",\n",
    ")\n",
    "\n",
    "index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# As expected, we have 24 timestamps in total,\n",
    "# corresponding to each one of the hours ahead that\n",
    "# we want to forecast, respect to the forecasting\n",
    "# start point.\n",
    "\n",
    "len(index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    CO_sensor   RH\n",
       "2005-03-04 00:00:00       NaN  NaN\n",
       "2005-03-04 01:00:00       NaN  NaN\n",
       "2005-03-04 02:00:00       NaN  NaN\n",
       "2005-03-04 03:00:00       NaN  NaN\n",
       "2005-03-04 04:00:00       NaN  NaN\n",
       "2005-03-04 05:00:00       NaN  NaN\n",
       "2005-03-04 06:00:00       NaN  NaN\n",
       "2005-03-04 07:00:00       NaN  NaN\n",
       "2005-03-04 08:00:00       NaN  NaN\n",
       "2005-03-04 09:00:00       NaN  NaN\n",
       "2005-03-04 10:00:00       NaN  NaN\n",
       "2005-03-04 11:00:00       NaN  NaN\n",
       "2005-03-04 12:00:00       NaN  NaN\n",
       "2005-03-04 13:00:00       NaN  NaN\n",
       "2005-03-04 14:00:00       NaN  NaN\n",
       "2005-03-04 15:00:00       NaN  NaN\n",
       "2005-03-04 16:00:00       NaN  NaN\n",
       "2005-03-04 17:00:00       NaN  NaN\n",
       "2005-03-04 18:00:00       NaN  NaN\n",
       "2005-03-04 19:00:00       NaN  NaN\n",
       "2005-03-04 20:00:00       NaN  NaN\n",
       "2005-03-04 21:00:00       NaN  NaN\n",
       "2005-03-04 22:00:00       NaN  NaN\n",
       "2005-03-04 23:00:00       NaN  NaN"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The forecasting horizon - dataframe to collect predictions\n",
    "\n",
    "f_horizon = pd.DataFrame(columns=[\"CO_sensor\", \"RH\"], index=index)\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forecast 1 hour forward\n",
    "\n",
    "We will create a dataframe that contains the necessary data to make the first point of forecast."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2005-03-03 00:00:00')"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 24 hs before the first forecasting point\n",
    "\n",
    "start_point = forecast_point - pd.offsets.Hour(24)\n",
    "\n",
    "start_point"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Sole\\AppData\\Local\\Temp\\ipykernel_18864\\1524750638.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  input_data.loc[forecast_point] = np.nan\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-03 00:00:00</th>\n",
       "      <td>1047.0</td>\n",
       "      <td>41.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 01:00:00</th>\n",
       "      <td>1030.0</td>\n",
       "      <td>43.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 02:00:00</th>\n",
       "      <td>986.0</td>\n",
       "      <td>45.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 03:00:00</th>\n",
       "      <td>992.0</td>\n",
       "      <td>49.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 04:00:00</th>\n",
       "      <td>1076.0</td>\n",
       "      <td>56.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 05:00:00</th>\n",
       "      <td>1104.0</td>\n",
       "      <td>67.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 06:00:00</th>\n",
       "      <td>1160.0</td>\n",
       "      <td>74.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 07:00:00</th>\n",
       "      <td>1217.0</td>\n",
       "      <td>75.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 08:00:00</th>\n",
       "      <td>1457.0</td>\n",
       "      <td>72.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 09:00:00</th>\n",
       "      <td>1337.0</td>\n",
       "      <td>50.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 10:00:00</th>\n",
       "      <td>1111.0</td>\n",
       "      <td>39.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 11:00:00</th>\n",
       "      <td>1165.0</td>\n",
       "      <td>75.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 12:00:00</th>\n",
       "      <td>1129.0</td>\n",
       "      <td>78.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 13:00:00</th>\n",
       "      <td>1092.0</td>\n",
       "      <td>69.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 14:00:00</th>\n",
       "      <td>1096.0</td>\n",
       "      <td>66.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 15:00:00</th>\n",
       "      <td>1108.0</td>\n",
       "      <td>70.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 16:00:00</th>\n",
       "      <td>1124.0</td>\n",
       "      <td>72.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 17:00:00</th>\n",
       "      <td>1216.0</td>\n",
       "      <td>75.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 18:00:00</th>\n",
       "      <td>1437.0</td>\n",
       "      <td>80.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 19:00:00</th>\n",
       "      <td>1473.0</td>\n",
       "      <td>82.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 20:00:00</th>\n",
       "      <td>1396.0</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 21:00:00</th>\n",
       "      <td>1285.0</td>\n",
       "      <td>83.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 22:00:00</th>\n",
       "      <td>1206.0</td>\n",
       "      <td>82.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 23:00:00</th>\n",
       "      <td>1179.0</td>\n",
       "      <td>82.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     CO_sensor    RH\n",
       "Date_Time                           \n",
       "2005-03-03 00:00:00     1047.0  41.7\n",
       "2005-03-03 01:00:00     1030.0  43.3\n",
       "2005-03-03 02:00:00      986.0  45.9\n",
       "2005-03-03 03:00:00      992.0  49.7\n",
       "2005-03-03 04:00:00     1076.0  56.3\n",
       "2005-03-03 05:00:00     1104.0  67.9\n",
       "2005-03-03 06:00:00     1160.0  74.1\n",
       "2005-03-03 07:00:00     1217.0  75.6\n",
       "2005-03-03 08:00:00     1457.0  72.4\n",
       "2005-03-03 09:00:00     1337.0  50.2\n",
       "2005-03-03 10:00:00     1111.0  39.4\n",
       "2005-03-03 11:00:00     1165.0  75.9\n",
       "2005-03-03 12:00:00     1129.0  78.6\n",
       "2005-03-03 13:00:00     1092.0  69.2\n",
       "2005-03-03 14:00:00     1096.0  66.0\n",
       "2005-03-03 15:00:00     1108.0  70.1\n",
       "2005-03-03 16:00:00     1124.0  72.1\n",
       "2005-03-03 17:00:00     1216.0  75.7\n",
       "2005-03-03 18:00:00     1437.0  80.4\n",
       "2005-03-03 19:00:00     1473.0  82.4\n",
       "2005-03-03 20:00:00     1396.0  84.0\n",
       "2005-03-03 21:00:00     1285.0  83.6\n",
       "2005-03-03 22:00:00     1206.0  82.5\n",
       "2005-03-03 23:00:00     1179.0  82.0\n",
       "2005-03-04 00:00:00        NaN   NaN"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# We create input data to obtain the first prediction value.\n",
    "\n",
    "input_data = X_test[(X_test.index >= start_point) & (X_test.index < forecast_point)]\n",
    "\n",
    "input_data.loc[forecast_point] = np.nan\n",
    "\n",
    "input_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(input_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>week</th>\n",
       "      <th>day_of_week</th>\n",
       "      <th>day_of_month</th>\n",
       "      <th>hour</th>\n",
       "      <th>weekend</th>\n",
       "      <th>CO_sensor_lag_1H</th>\n",
       "      <th>CO_sensor_lag_24H</th>\n",
       "      <th>CO_sensor_window_3H_mean</th>\n",
       "      <th>month_sin</th>\n",
       "      <th>month_cos</th>\n",
       "      <th>hour_sin</th>\n",
       "      <th>hour_cos</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1179.0</td>\n",
       "      <td>1047.0</td>\n",
       "      <td>1223.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.123234e-17</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            month  week  day_of_week  day_of_month  hour  weekend  \\\n",
       "Date_Time                                                           \n",
       "2005-03-04      3     9            4             4     0        0   \n",
       "\n",
       "            CO_sensor_lag_1H  CO_sensor_lag_24H  CO_sensor_window_3H_mean  \\\n",
       "Date_Time                                                                   \n",
       "2005-03-04            1179.0             1047.0               1223.333333   \n",
       "\n",
       "            month_sin     month_cos  hour_sin  hour_cos  \n",
       "Date_Time                                                \n",
       "2005-03-04        1.0  6.123234e-17       0.0       1.0  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test transformation\n",
    "\n",
    "pipe.transform(input_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1117.1392227 ,   57.08291157]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's obtain the first prediction.\n",
    "\n",
    "pred = lasso.predict(pipe.transform(input_data))\n",
    "\n",
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "2005-03-04 00:00:00  1117.139223  57.082912\n",
       "2005-03-04 01:00:00          NaN        NaN\n",
       "2005-03-04 02:00:00          NaN        NaN\n",
       "2005-03-04 03:00:00          NaN        NaN\n",
       "2005-03-04 04:00:00          NaN        NaN\n",
       "2005-03-04 05:00:00          NaN        NaN\n",
       "2005-03-04 06:00:00          NaN        NaN\n",
       "2005-03-04 07:00:00          NaN        NaN\n",
       "2005-03-04 08:00:00          NaN        NaN\n",
       "2005-03-04 09:00:00          NaN        NaN\n",
       "2005-03-04 10:00:00          NaN        NaN\n",
       "2005-03-04 11:00:00          NaN        NaN\n",
       "2005-03-04 12:00:00          NaN        NaN\n",
       "2005-03-04 13:00:00          NaN        NaN\n",
       "2005-03-04 14:00:00          NaN        NaN\n",
       "2005-03-04 15:00:00          NaN        NaN\n",
       "2005-03-04 16:00:00          NaN        NaN\n",
       "2005-03-04 17:00:00          NaN        NaN\n",
       "2005-03-04 18:00:00          NaN        NaN\n",
       "2005-03-04 19:00:00          NaN        NaN\n",
       "2005-03-04 20:00:00          NaN        NaN\n",
       "2005-03-04 21:00:00          NaN        NaN\n",
       "2005-03-04 22:00:00          NaN        NaN\n",
       "2005-03-04 23:00:00          NaN        NaN"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Add the prediction to the horizon.\n",
    "\n",
    "f_horizon.loc[forecast_point] = pred\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forecasting 2 hours forward\n",
    "\n",
    "We will use the previous prediction to create features to forecast the following hour."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Sole\\AppData\\Local\\Temp\\ipykernel_18864\\3143276914.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  input_data.loc[forecast_point] = pred\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-03 00:00:00</th>\n",
       "      <td>1047.000000</td>\n",
       "      <td>41.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 01:00:00</th>\n",
       "      <td>1030.000000</td>\n",
       "      <td>43.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 02:00:00</th>\n",
       "      <td>986.000000</td>\n",
       "      <td>45.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 03:00:00</th>\n",
       "      <td>992.000000</td>\n",
       "      <td>49.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 04:00:00</th>\n",
       "      <td>1076.000000</td>\n",
       "      <td>56.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 05:00:00</th>\n",
       "      <td>1104.000000</td>\n",
       "      <td>67.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 06:00:00</th>\n",
       "      <td>1160.000000</td>\n",
       "      <td>74.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 07:00:00</th>\n",
       "      <td>1217.000000</td>\n",
       "      <td>75.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 08:00:00</th>\n",
       "      <td>1457.000000</td>\n",
       "      <td>72.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 09:00:00</th>\n",
       "      <td>1337.000000</td>\n",
       "      <td>50.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 10:00:00</th>\n",
       "      <td>1111.000000</td>\n",
       "      <td>39.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 11:00:00</th>\n",
       "      <td>1165.000000</td>\n",
       "      <td>75.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 12:00:00</th>\n",
       "      <td>1129.000000</td>\n",
       "      <td>78.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 13:00:00</th>\n",
       "      <td>1092.000000</td>\n",
       "      <td>69.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 14:00:00</th>\n",
       "      <td>1096.000000</td>\n",
       "      <td>66.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 15:00:00</th>\n",
       "      <td>1108.000000</td>\n",
       "      <td>70.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 16:00:00</th>\n",
       "      <td>1124.000000</td>\n",
       "      <td>72.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 17:00:00</th>\n",
       "      <td>1216.000000</td>\n",
       "      <td>75.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 18:00:00</th>\n",
       "      <td>1437.000000</td>\n",
       "      <td>80.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 19:00:00</th>\n",
       "      <td>1473.000000</td>\n",
       "      <td>82.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 20:00:00</th>\n",
       "      <td>1396.000000</td>\n",
       "      <td>84.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 21:00:00</th>\n",
       "      <td>1285.000000</td>\n",
       "      <td>83.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 22:00:00</th>\n",
       "      <td>1206.000000</td>\n",
       "      <td>82.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 23:00:00</th>\n",
       "      <td>1179.000000</td>\n",
       "      <td>82.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "Date_Time                                  \n",
       "2005-03-03 00:00:00  1047.000000  41.700000\n",
       "2005-03-03 01:00:00  1030.000000  43.300000\n",
       "2005-03-03 02:00:00   986.000000  45.900000\n",
       "2005-03-03 03:00:00   992.000000  49.700000\n",
       "2005-03-03 04:00:00  1076.000000  56.300000\n",
       "2005-03-03 05:00:00  1104.000000  67.900000\n",
       "2005-03-03 06:00:00  1160.000000  74.100000\n",
       "2005-03-03 07:00:00  1217.000000  75.600000\n",
       "2005-03-03 08:00:00  1457.000000  72.400000\n",
       "2005-03-03 09:00:00  1337.000000  50.200000\n",
       "2005-03-03 10:00:00  1111.000000  39.400000\n",
       "2005-03-03 11:00:00  1165.000000  75.900000\n",
       "2005-03-03 12:00:00  1129.000000  78.600000\n",
       "2005-03-03 13:00:00  1092.000000  69.200000\n",
       "2005-03-03 14:00:00  1096.000000  66.000000\n",
       "2005-03-03 15:00:00  1108.000000  70.100000\n",
       "2005-03-03 16:00:00  1124.000000  72.100000\n",
       "2005-03-03 17:00:00  1216.000000  75.700000\n",
       "2005-03-03 18:00:00  1437.000000  80.400000\n",
       "2005-03-03 19:00:00  1473.000000  82.400000\n",
       "2005-03-03 20:00:00  1396.000000  84.000000\n",
       "2005-03-03 21:00:00  1285.000000  83.600000\n",
       "2005-03-03 22:00:00  1206.000000  82.500000\n",
       "2005-03-03 23:00:00  1179.000000  82.000000\n",
       "2005-03-04 00:00:00  1117.139223  57.082912"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Add the prediction to input data.\n",
    "input_data.loc[forecast_point] = pred\n",
    "\n",
    "input_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date_Time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-03 01:00:00</th>\n",
       "      <td>1030.000000</td>\n",
       "      <td>43.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 02:00:00</th>\n",
       "      <td>986.000000</td>\n",
       "      <td>45.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 03:00:00</th>\n",
       "      <td>992.000000</td>\n",
       "      <td>49.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 04:00:00</th>\n",
       "      <td>1076.000000</td>\n",
       "      <td>56.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 05:00:00</th>\n",
       "      <td>1104.000000</td>\n",
       "      <td>67.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 06:00:00</th>\n",
       "      <td>1160.000000</td>\n",
       "      <td>74.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 07:00:00</th>\n",
       "      <td>1217.000000</td>\n",
       "      <td>75.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 08:00:00</th>\n",
       "      <td>1457.000000</td>\n",
       "      <td>72.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 09:00:00</th>\n",
       "      <td>1337.000000</td>\n",
       "      <td>50.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 10:00:00</th>\n",
       "      <td>1111.000000</td>\n",
       "      <td>39.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 11:00:00</th>\n",
       "      <td>1165.000000</td>\n",
       "      <td>75.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 12:00:00</th>\n",
       "      <td>1129.000000</td>\n",
       "      <td>78.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 13:00:00</th>\n",
       "      <td>1092.000000</td>\n",
       "      <td>69.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 14:00:00</th>\n",
       "      <td>1096.000000</td>\n",
       "      <td>66.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 15:00:00</th>\n",
       "      <td>1108.000000</td>\n",
       "      <td>70.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 16:00:00</th>\n",
       "      <td>1124.000000</td>\n",
       "      <td>72.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 17:00:00</th>\n",
       "      <td>1216.000000</td>\n",
       "      <td>75.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 18:00:00</th>\n",
       "      <td>1437.000000</td>\n",
       "      <td>80.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 19:00:00</th>\n",
       "      <td>1473.000000</td>\n",
       "      <td>82.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 20:00:00</th>\n",
       "      <td>1396.000000</td>\n",
       "      <td>84.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 21:00:00</th>\n",
       "      <td>1285.000000</td>\n",
       "      <td>83.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 22:00:00</th>\n",
       "      <td>1206.000000</td>\n",
       "      <td>82.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-03 23:00:00</th>\n",
       "      <td>1179.000000</td>\n",
       "      <td>82.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "Date_Time                                  \n",
       "2005-03-03 01:00:00  1030.000000  43.300000\n",
       "2005-03-03 02:00:00   986.000000  45.900000\n",
       "2005-03-03 03:00:00   992.000000  49.700000\n",
       "2005-03-03 04:00:00  1076.000000  56.300000\n",
       "2005-03-03 05:00:00  1104.000000  67.900000\n",
       "2005-03-03 06:00:00  1160.000000  74.100000\n",
       "2005-03-03 07:00:00  1217.000000  75.600000\n",
       "2005-03-03 08:00:00  1457.000000  72.400000\n",
       "2005-03-03 09:00:00  1337.000000  50.200000\n",
       "2005-03-03 10:00:00  1111.000000  39.400000\n",
       "2005-03-03 11:00:00  1165.000000  75.900000\n",
       "2005-03-03 12:00:00  1129.000000  78.600000\n",
       "2005-03-03 13:00:00  1092.000000  69.200000\n",
       "2005-03-03 14:00:00  1096.000000  66.000000\n",
       "2005-03-03 15:00:00  1108.000000  70.100000\n",
       "2005-03-03 16:00:00  1124.000000  72.100000\n",
       "2005-03-03 17:00:00  1216.000000  75.700000\n",
       "2005-03-03 18:00:00  1437.000000  80.400000\n",
       "2005-03-03 19:00:00  1473.000000  82.400000\n",
       "2005-03-03 20:00:00  1396.000000  84.000000\n",
       "2005-03-03 21:00:00  1285.000000  83.600000\n",
       "2005-03-03 22:00:00  1206.000000  82.500000\n",
       "2005-03-03 23:00:00  1179.000000  82.000000\n",
       "2005-03-04 00:00:00  1117.139223  57.082912\n",
       "2005-03-04 01:00:00          NaN        NaN"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Re-slice the input data - in essence, move \n",
    "# 1 step forward\n",
    "\n",
    "start_point = start_point + pd.offsets.Hour(1)\n",
    "forecast_point = forecast_point + pd.offsets.Hour(1)\n",
    "\n",
    "input_data = input_data[(input_data.index >= start_point)]\n",
    "\n",
    "input_data.loc[forecast_point] = np.nan\n",
    "\n",
    "input_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1066.79861492,   57.26637659]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's obtain the following prediction.\n",
    "\n",
    "pred = lasso.predict(pipe.transform(input_data))\n",
    "\n",
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>1066.798615</td>\n",
       "      <td>57.266377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "2005-03-04 00:00:00  1117.139223  57.082912\n",
       "2005-03-04 01:00:00  1066.798615  57.266377\n",
       "2005-03-04 02:00:00          NaN        NaN\n",
       "2005-03-04 03:00:00          NaN        NaN\n",
       "2005-03-04 04:00:00          NaN        NaN\n",
       "2005-03-04 05:00:00          NaN        NaN\n",
       "2005-03-04 06:00:00          NaN        NaN\n",
       "2005-03-04 07:00:00          NaN        NaN\n",
       "2005-03-04 08:00:00          NaN        NaN\n",
       "2005-03-04 09:00:00          NaN        NaN\n",
       "2005-03-04 10:00:00          NaN        NaN\n",
       "2005-03-04 11:00:00          NaN        NaN\n",
       "2005-03-04 12:00:00          NaN        NaN\n",
       "2005-03-04 13:00:00          NaN        NaN\n",
       "2005-03-04 14:00:00          NaN        NaN\n",
       "2005-03-04 15:00:00          NaN        NaN\n",
       "2005-03-04 16:00:00          NaN        NaN\n",
       "2005-03-04 17:00:00          NaN        NaN\n",
       "2005-03-04 18:00:00          NaN        NaN\n",
       "2005-03-04 19:00:00          NaN        NaN\n",
       "2005-03-04 20:00:00          NaN        NaN\n",
       "2005-03-04 21:00:00          NaN        NaN\n",
       "2005-03-04 22:00:00          NaN        NaN\n",
       "2005-03-04 23:00:00          NaN        NaN"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Add the prediction to the horizon.\n",
    "\n",
    "f_horizon.loc[forecast_point] = pred\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forecast 3 hours forward\n",
    "\n",
    "We will use the previous prediction to create features to forecast the following hour."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Add the prediction to input data.\n",
    "input_data.loc[forecast_point] = pred\n",
    "\n",
    "# Re-slice the input data\n",
    "start_point = start_point + pd.offsets.Hour(1)\n",
    "forecast_point = forecast_point + pd.offsets.Hour(1)\n",
    "\n",
    "input_data = input_data[(input_data.index >= start_point)]\n",
    "\n",
    "input_data.loc[forecast_point] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1024.54340635,   56.77766328]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's obtain the following prediction.\n",
    "\n",
    "pred = lasso.predict(pipe.transform(input_data))\n",
    "\n",
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>1066.798615</td>\n",
       "      <td>57.266377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>1024.543406</td>\n",
       "      <td>56.777663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "2005-03-04 00:00:00  1117.139223  57.082912\n",
       "2005-03-04 01:00:00  1066.798615  57.266377\n",
       "2005-03-04 02:00:00  1024.543406  56.777663\n",
       "2005-03-04 03:00:00          NaN        NaN\n",
       "2005-03-04 04:00:00          NaN        NaN\n",
       "2005-03-04 05:00:00          NaN        NaN\n",
       "2005-03-04 06:00:00          NaN        NaN\n",
       "2005-03-04 07:00:00          NaN        NaN\n",
       "2005-03-04 08:00:00          NaN        NaN\n",
       "2005-03-04 09:00:00          NaN        NaN\n",
       "2005-03-04 10:00:00          NaN        NaN\n",
       "2005-03-04 11:00:00          NaN        NaN\n",
       "2005-03-04 12:00:00          NaN        NaN\n",
       "2005-03-04 13:00:00          NaN        NaN\n",
       "2005-03-04 14:00:00          NaN        NaN\n",
       "2005-03-04 15:00:00          NaN        NaN\n",
       "2005-03-04 16:00:00          NaN        NaN\n",
       "2005-03-04 17:00:00          NaN        NaN\n",
       "2005-03-04 18:00:00          NaN        NaN\n",
       "2005-03-04 19:00:00          NaN        NaN\n",
       "2005-03-04 20:00:00          NaN        NaN\n",
       "2005-03-04 21:00:00          NaN        NaN\n",
       "2005-03-04 22:00:00          NaN        NaN\n",
       "2005-03-04 23:00:00          NaN        NaN"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Add the prediction to the horizon.\n",
    "\n",
    "f_horizon.loc[forecast_point] = pred\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And we continue on an on. You get the gist.\n",
    "\n",
    "# Forecasting 24 hours forward - altogether\n",
    "\n",
    "Let's now streamline this procedure to forecast the next 24 hours of CO concentration.\n",
    "\n",
    "This code is the same that we described previously. We just put it in a loop."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    CO_sensor   RH\n",
       "2005-03-04 00:00:00       NaN  NaN\n",
       "2005-03-04 01:00:00       NaN  NaN\n",
       "2005-03-04 02:00:00       NaN  NaN\n",
       "2005-03-04 03:00:00       NaN  NaN\n",
       "2005-03-04 04:00:00       NaN  NaN\n",
       "2005-03-04 05:00:00       NaN  NaN\n",
       "2005-03-04 06:00:00       NaN  NaN\n",
       "2005-03-04 07:00:00       NaN  NaN\n",
       "2005-03-04 08:00:00       NaN  NaN\n",
       "2005-03-04 09:00:00       NaN  NaN\n",
       "2005-03-04 10:00:00       NaN  NaN\n",
       "2005-03-04 11:00:00       NaN  NaN\n",
       "2005-03-04 12:00:00       NaN  NaN\n",
       "2005-03-04 13:00:00       NaN  NaN\n",
       "2005-03-04 14:00:00       NaN  NaN\n",
       "2005-03-04 15:00:00       NaN  NaN\n",
       "2005-03-04 16:00:00       NaN  NaN\n",
       "2005-03-04 17:00:00       NaN  NaN\n",
       "2005-03-04 18:00:00       NaN  NaN\n",
       "2005-03-04 19:00:00       NaN  NaN\n",
       "2005-03-04 20:00:00       NaN  NaN\n",
       "2005-03-04 21:00:00       NaN  NaN\n",
       "2005-03-04 22:00:00       NaN  NaN\n",
       "2005-03-04 23:00:00       NaN  NaN"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create forecasting horizon dataframe\n",
    "\n",
    "# The first hour of forecast.\n",
    "forecast_point = pd.Timestamp(\"2005-03-04\")\n",
    "\n",
    "# The forecasting horizon.\n",
    "forecast_end = forecast_point + pd.offsets.Hour(23)\n",
    "\n",
    "# The timestamps at which we want to predict\n",
    "# pollutant concentration.\n",
    "\n",
    "index = pd.date_range(\n",
    "    start=forecast_point,\n",
    "    end=forecast_end,\n",
    "    freq=\"1H\",\n",
    ")\n",
    "\n",
    "# the forecasting horizon\n",
    "f_horizon = pd.DataFrame(columns=[\"CO_sensor\", \"RH\"], index=index)\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Sole\\AppData\\Local\\Temp\\ipykernel_18864\\3927077873.py:8: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  input_data.loc[forecast_point] = np.nan\n"
     ]
    }
   ],
   "source": [
    "# Obtain the input data for the predictions\n",
    "\n",
    "# 24 hs before the first forecasting point\n",
    "start_point = forecast_point - pd.offsets.Hour(24)\n",
    "\n",
    "# We create input data to obtain the first prediction value.\n",
    "input_data = X_test[(X_test.index >= start_point) & (X_test.index < forecast_point)]\n",
    "input_data.loc[forecast_point] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Let's obtain the first prediction.\n",
    "\n",
    "pred = lasso.predict(pipe.transform(input_data))[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Sole\\AppData\\Local\\Temp\\ipykernel_18864\\3932576688.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  input_data.loc[forecast_point] = pred\n"
     ]
    }
   ],
   "source": [
    "# Add the prediction to the horizon\n",
    "# and to the input data\n",
    "\n",
    "f_horizon.loc[forecast_point] = pred\n",
    "input_data.loc[forecast_point] = pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CO_sensor</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>57.082912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>1066.798615</td>\n",
       "      <td>57.266377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>1024.543406</td>\n",
       "      <td>56.777663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>997.857636</td>\n",
       "      <td>56.493249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>992.646666</td>\n",
       "      <td>56.990503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>1001.273024</td>\n",
       "      <td>56.335018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>1022.73122</td>\n",
       "      <td>55.788933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>1053.327931</td>\n",
       "      <td>55.0108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>1107.378686</td>\n",
       "      <td>56.747155</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>1147.278141</td>\n",
       "      <td>53.184825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>1159.114711</td>\n",
       "      <td>47.968238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>1168.16151</td>\n",
       "      <td>46.782437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>1168.669477</td>\n",
       "      <td>44.321857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>1162.534941</td>\n",
       "      <td>42.035587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>1154.026161</td>\n",
       "      <td>40.741252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>1144.766407</td>\n",
       "      <td>40.045061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>1135.670841</td>\n",
       "      <td>39.955872</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>1134.276143</td>\n",
       "      <td>41.559268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>1153.143265</td>\n",
       "      <td>45.659785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>1174.110777</td>\n",
       "      <td>47.643706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>1184.534158</td>\n",
       "      <td>48.374603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>1180.173893</td>\n",
       "      <td>48.751645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>1166.074395</td>\n",
       "      <td>49.449784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>1150.694164</td>\n",
       "      <td>50.589041</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       CO_sensor         RH\n",
       "2005-03-04 00:00:00  1117.139223  57.082912\n",
       "2005-03-04 01:00:00  1066.798615  57.266377\n",
       "2005-03-04 02:00:00  1024.543406  56.777663\n",
       "2005-03-04 03:00:00   997.857636  56.493249\n",
       "2005-03-04 04:00:00   992.646666  56.990503\n",
       "2005-03-04 05:00:00  1001.273024  56.335018\n",
       "2005-03-04 06:00:00   1022.73122  55.788933\n",
       "2005-03-04 07:00:00  1053.327931    55.0108\n",
       "2005-03-04 08:00:00  1107.378686  56.747155\n",
       "2005-03-04 09:00:00  1147.278141  53.184825\n",
       "2005-03-04 10:00:00  1159.114711  47.968238\n",
       "2005-03-04 11:00:00   1168.16151  46.782437\n",
       "2005-03-04 12:00:00  1168.669477  44.321857\n",
       "2005-03-04 13:00:00  1162.534941  42.035587\n",
       "2005-03-04 14:00:00  1154.026161  40.741252\n",
       "2005-03-04 15:00:00  1144.766407  40.045061\n",
       "2005-03-04 16:00:00  1135.670841  39.955872\n",
       "2005-03-04 17:00:00  1134.276143  41.559268\n",
       "2005-03-04 18:00:00  1153.143265  45.659785\n",
       "2005-03-04 19:00:00  1174.110777  47.643706\n",
       "2005-03-04 20:00:00  1184.534158  48.374603\n",
       "2005-03-04 21:00:00  1180.173893  48.751645\n",
       "2005-03-04 22:00:00  1166.074395  49.449784\n",
       "2005-03-04 23:00:00  1150.694164  50.589041"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# And we repeat the process 23 times:\n",
    "\n",
    "for i in range(23):\n",
    "    \n",
    "    # Re-slice the input data\n",
    "    start_point = start_point + pd.offsets.Hour(1)\n",
    "    forecast_point = forecast_point + pd.offsets.Hour(1)\n",
    "\n",
    "    input_data = input_data[(input_data.index >= start_point)]\n",
    "    input_data.loc[forecast_point] = np.nan\n",
    "\n",
    "    # Obtain the prediction\n",
    "    pred = lasso.predict(pipe.transform(input_data))\n",
    "\n",
    "    # Add prediction to horizon.\n",
    "    f_horizon.loc[forecast_point] = pred\n",
    "    input_data.loc[forecast_point] = pred\n",
    "\n",
    "f_horizon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>predicted</th>\n",
       "      <th>actual</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-03-04 00:00:00</th>\n",
       "      <td>1117.139223</td>\n",
       "      <td>929.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 01:00:00</th>\n",
       "      <td>1066.798615</td>\n",
       "      <td>951.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 02:00:00</th>\n",
       "      <td>1024.543406</td>\n",
       "      <td>938.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 03:00:00</th>\n",
       "      <td>997.857636</td>\n",
       "      <td>921.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 04:00:00</th>\n",
       "      <td>992.646666</td>\n",
       "      <td>850.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 05:00:00</th>\n",
       "      <td>1001.273024</td>\n",
       "      <td>811.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 06:00:00</th>\n",
       "      <td>1022.73122</td>\n",
       "      <td>848.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 07:00:00</th>\n",
       "      <td>1053.327931</td>\n",
       "      <td>882.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 08:00:00</th>\n",
       "      <td>1107.378686</td>\n",
       "      <td>936.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 09:00:00</th>\n",
       "      <td>1147.278141</td>\n",
       "      <td>1022.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 10:00:00</th>\n",
       "      <td>1159.114711</td>\n",
       "      <td>970.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 11:00:00</th>\n",
       "      <td>1168.16151</td>\n",
       "      <td>1000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 12:00:00</th>\n",
       "      <td>1168.669477</td>\n",
       "      <td>996.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 13:00:00</th>\n",
       "      <td>1162.534941</td>\n",
       "      <td>928.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 14:00:00</th>\n",
       "      <td>1154.026161</td>\n",
       "      <td>933.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 15:00:00</th>\n",
       "      <td>1144.766407</td>\n",
       "      <td>956.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 16:00:00</th>\n",
       "      <td>1135.670841</td>\n",
       "      <td>968.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 17:00:00</th>\n",
       "      <td>1134.276143</td>\n",
       "      <td>953.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 18:00:00</th>\n",
       "      <td>1153.143265</td>\n",
       "      <td>1015.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 19:00:00</th>\n",
       "      <td>1174.110777</td>\n",
       "      <td>1248.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 20:00:00</th>\n",
       "      <td>1184.534158</td>\n",
       "      <td>1180.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 21:00:00</th>\n",
       "      <td>1180.173893</td>\n",
       "      <td>1102.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 22:00:00</th>\n",
       "      <td>1166.074395</td>\n",
       "      <td>1116.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-03-04 23:00:00</th>\n",
       "      <td>1150.694164</td>\n",
       "      <td>1100.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       predicted  actual\n",
       "2005-03-04 00:00:00  1117.139223   929.0\n",
       "2005-03-04 01:00:00  1066.798615   951.0\n",
       "2005-03-04 02:00:00  1024.543406   938.0\n",
       "2005-03-04 03:00:00   997.857636   921.0\n",
       "2005-03-04 04:00:00   992.646666   850.0\n",
       "2005-03-04 05:00:00  1001.273024   811.0\n",
       "2005-03-04 06:00:00   1022.73122   848.0\n",
       "2005-03-04 07:00:00  1053.327931   882.0\n",
       "2005-03-04 08:00:00  1107.378686   936.0\n",
       "2005-03-04 09:00:00  1147.278141  1022.0\n",
       "2005-03-04 10:00:00  1159.114711   970.0\n",
       "2005-03-04 11:00:00   1168.16151  1000.0\n",
       "2005-03-04 12:00:00  1168.669477   996.0\n",
       "2005-03-04 13:00:00  1162.534941   928.0\n",
       "2005-03-04 14:00:00  1154.026161   933.0\n",
       "2005-03-04 15:00:00  1144.766407   956.0\n",
       "2005-03-04 16:00:00  1135.670841   968.0\n",
       "2005-03-04 17:00:00  1134.276143   953.0\n",
       "2005-03-04 18:00:00  1153.143265  1015.0\n",
       "2005-03-04 19:00:00  1174.110777  1248.0\n",
       "2005-03-04 20:00:00  1184.534158  1180.0\n",
       "2005-03-04 21:00:00  1180.173893  1102.0\n",
       "2005-03-04 22:00:00  1166.074395  1116.0\n",
       "2005-03-04 23:00:00  1150.694164  1100.0"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# We can plot our predictions vs. the truth, which is\n",
    "# the CO concentration in the test set.\n",
    "\n",
    "tmp = pd.DataFrame(f_horizon[\"CO_sensor\"]).join(\n",
    "    X_test[\"CO_sensor\"], lsuffix=\"_left\", rsuffix=\"_right\")\n",
    "\n",
    "tmp.columns = [\"predicted\", \"actual\"]\n",
    "\n",
    "tmp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'CO concentration')"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tmp.plot()\n",
    "plt.ylabel(\"CO concentration\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nice!\n",
    "\n",
    "We now obtained the first 24 hours forecast."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fsml",
   "language": "python",
   "name": "fsml"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
